--utlib it,v3,u2,cf,rn,c3,bc,rd,pi,rn,ra,fl,ce,ts,ms,ca,create,swait = Instance.new,Vector3.new,UDim2.new,CFrame.new,Ray.new,Color3.new,BrickColor.new,math.rad,math.pi,Ray.new,math.random,math.floor,math.ceil,game:GetService("TweenService"),math.sqrt,CFrame.Angles,function(Object, ...) local Obj = Instance.new(Object) for i,v in next,(...) do Obj[i] = v end return Obj end,function(a) if a==0 or a==nil then game:GetService("RunService").Stepped:Wait(0)else for b=0,a do game:GetService("RunService").Stepped:Wait(0)end end end;function lerp(c,d,e,f,g)local h=0;for b=1,f*100 do if g==true then d=c.C0 end;c.C0=d:lerp(e,b/(f*100))wait(0.01)h=h+0.01 end end --utlib hu=math.huge Controls=[[ R: Switch rotate/move E: Export Q: Replicate to server G: Switch Limb (you can also click the limbs) Z: Undo (only once) X: Restart limb c0 H: Hides handles Top textbox is position increment Bottom one is for rotation ]] print(Controls) ArtificialHB = Instance.new("BindableEvent", script) ArtificialHB.Name = "ArtificialHB" script:WaitForChild("ArtificialHB") frame = (1/60) tf = 0 allowframeloss = false tossremainder = false lastframe = tick() script.ArtificialHB:Fire() game:GetService("RunService").Heartbeat:connect(function(s, p) tf = tf + s if tf >= frame then if allowframeloss then script.ArtificialHB:Fire() lastframe = tick() else for i = 1, math.floor(tf / frame) do script.ArtificialHB:Fire() end lastframe = tick() end if tossremainder then tf = 0 else tf = tf - frame * math.floor(tf / frame) end end end) function Swait(NUMBER) if NUMBER == 0 or NUMBER == nil then ArtificialHB.Event:wait() else for i = 1, NUMBER do ArtificialHB.Event:wait() end end end --math sin=math.sin cos=math.cos cla=math.clamp --math Debris = game:GetService("Debris") char=owner.Character animating=false hum=char.Humanoid atv=it("BoolValue",script) blv=it("BoolValue",script) atv.Name="Attacking" blv.Name="Blocking" mev=it("RemoteEvent",char) mev.Name="MainEvent" combo=0 comboh=0 combotim=0 pcall(function() local htr=hum:GetPlayingAnimationTracks() for _,v in pairs(htr) do v:Stop() end db = true char.Animate:Destroy() local htr=hum:GetPlayingAnimationTracks() for _,v in pairs(htr) do v:Stop() end end) local anev=it("RemoteEvent",char) anev.Name="Rep" currentwaitspeed=0 ra=char["Right Arm"] local rls=char.Torso["Left Shoulder"] local rrs=char.Torso["Right Shoulder"] local rlh=char.Torso["Left Hip"] local rrh=char.Torso["Right Hip"] local rne=char.Torso["Neck"] local ls=it("Weld",char.Torso) local rs=it("Weld",char.Torso) local lh=it("Weld",char.Torso) local rh=it("Weld",char.Torso) local ne=it("Weld",char.Torso) local root=char.HumanoidRootPart local rj=root.RootJoint ls.Name="Left Shoulderw" rs.Name="Right Shoulderw" lh.Name="Left Hipw" rh.Name="Right Hipw" ne.Name="Neckw" ls.Part0=rls.Part0 ls.Part1=rls.Part1 ls.C0=rls.C0 ls.C1=rls.C1 rs.Part0=rrs.Part0 rs.Part1=rrs.Part1 rs.C0=rrs.C0 rs.C1=rrs.C1 lh.Part0=rlh.Part0 lh.Part1=rlh.Part1 lh.C0=rlh.C0 lh.C1=rlh.C1 rh.Part0=rrh.Part0 rh.Part1=rrh.Part1 rh.C0=rrh.C0 rh.C1=rrh.C1 ne.Part0=rne.Part0 ne.Part1=rne.Part1 ne.C0=rne.C0 ne.C1=rne.C1 lhc0=lh.C0 rhc0=rh.C0 lsc0=ls.C0 rsc0=rs.C0 rjc0=rj.C0 nec0=ne.C0 local inc=0 incspd=.1 ml=7 canwalk=true walking=false canidle=false idling=false jumping=false falling=false attacking=false candmg=false candmgl=false candmgrl=false equipped=false bln=[[ ]] local blt=it("StringValue",char) blt.Name="bln" blt.Value=bln a=[[ --utlib it,v3,u2,cf,rn,c3,bc,rd,pi,rn,ra,fl,ce,ts,ms,ca,create,swait = Instance.new,Vector3.new,UDim2.new,CFrame.new,Ray.new,Color3.new,BrickColor.new,math.rad,math.pi,Ray.new,math.random,math.floor,math.ceil,game:GetService("TweenService"),math.sqrt,CFrame.Angles,function(Object, ...) local Obj = Instance.new(Object) for i,v in next,(...) do Obj[i] = v end return Obj end,function(a) if a==0 or a==nil then game:GetService("RunService").Stepped:Wait(0)else for b=0,a do game:GetService("RunService").Stepped:Wait(0)end end end;function lerp(c,d,e,f,g)local h=0;for b=1,f*100 do if g==true then d=c.C0 end;c.C0=d:lerp(e,b/(f*100))wait(0.01)h=h+0.01 end end --utlib hu=math.huge char=owner.Character anev=char.Rep hum=char.Humanoid mev=char.MainEvent mouse=owner:GetMouse() uis=game:GetService("UserInputService") head = owner.Character.Head bbg = Instance.new("BillboardGui",head) bbg.Size = UDim2.new(2,0,1,0) bbg.AlwaysOnTop = true bbg.StudsOffsetWorldSpace = Vector3.new(0,3,0) ttb = Instance.new("TextBox", bbg) ttb.Size = UDim2.new(2, 0, 1, 0) ttb.Position = UDim2.new(-0.5, 0, -0.5, 0) ttb.BackgroundTransparency = 1 ttb.TextStrokeTransparency=0 ttb.TextScaled = true ttb.Selectable=true ttb.Text="Animation mode 2" local g = it("ScreenGui") local tb = it("TextBox",g) tb.Size =u2(0, 700, 0, 50) tb.Position = u2(.5, -350, -.25, 230) tb.BackgroundTransparency = 1 tb.TextScaled = true tb.TextColor3= Color3.new(255,255,255) tb.TextStrokeTransparency = 0 tb.Text='ANIMATIONSTRINGHERE' tb.MultiLine=true tb.ClearTextOnFocus=false local tb2 = it("TextBox",g) tb2.Size =u2(.05, 0, .05, 0) tb2.Position = u2(.7, 0, 0, 0) tb2.BackgroundTransparency = .7 tb2.TextScaled = true tb2.TextColor3= Color3.new(255,255,255) tb2.TextStrokeTransparency = 0 tb2.Text='5' tb2.MultiLine=true tb2.ClearTextOnFocus=false local tb3 = it("TextBox",g) tb3.Size =u2(.05, 0, .05, 0) tb3.Position = u2(.7, 0, -.05, 0) tb3.BackgroundTransparency = .7 tb3.TextScaled = true tb3.TextColor3= Color3.new(255,255,255) tb3.TextStrokeTransparency = 0 tb3.Text='.1' tb3.MultiLine=true tb3.ClearTextOnFocus=false g.Parent=script tor=owner.Character.Torso hrp=owner.Character.HumanoidRootPart ls=tor["Left Shoulderw"] rs=tor["Right Shoulderw"] lh=tor["Left Hipw"] rh=tor["Right Hipw"] rj=hrp["RootJoint"] ne=tor["Neckw"] CurrentLimb=ls local lsc0=ls.C0 local rsc0=rs.C0 local lhc0=lh.C0 local rhc0=rh.C0 local rjc0=rj.C0 local nec0=ne.C0 PlayerLimbs={ {Limb=ls,Num=1,Nc0=lsc0}, {Limb=rs,Num=2,Nc0=rsc0}, {Limb=lh,Num=3,Nc0=lhc0}, {Limb=rh,Num=4,Nc0=rhc0}, {Limb=rj,Num=5,Nc0=rjc0}, {Limb=ne,Num=6,Nc0=nec0} } moder=false hider=false curmode=PlayerLimbs[1] mouse=owner:GetMouse() mouse.TargetFilter=nil local increment = 5 local increment2= .1 --increments tb2.FocusLost:Connect(function() increment=tonumber(tb2.Text) or 1 tb2.Text=increment end) tb3.FocusLost:Connect(function() increment2=tonumber(tb3.Text) or 1 tb3.Text=increment2 end) --increments local lastCFrame = nil local lastLimb=nil script.Parent=owner.PlayerGui local ArcHandles=Instance.new("ArcHandles",script) local Handles=Instance.new("Handles",script) local np=owner.Character.Torso["Right Shoulder"] ArcHandles.Adornee=CurrentLimb.Part1 Handles.Adornee=nil function round(number) return math.floor((number / increment) + 0.5) * increment end function AngleFromAxis(axis, r) local relativeAngle = math.rad(round(math.deg(r))) if CurrentLimb==ls or CurrentLimb==lh then return axis == Enum.Axis.Z and {relativeAngle, 0, 0} or axis == Enum.Axis.Y and {0, relativeAngle, 0} or axis == Enum.Axis.X and {0, 0, -relativeAngle} elseif CurrentLimb==rs or CurrentLimb==rh then return axis == Enum.Axis.Z and {-relativeAngle, 0, 0} or axis == Enum.Axis.Y and {0, relativeAngle, 0} or axis == Enum.Axis.X and {0, 0, relativeAngle} elseif CurrentLimb==rj or CurrentLimb==ne then return axis == Enum.Axis.Z and {0, relativeAngle, 0} or axis == Enum.Axis.Y and {0, 0, relativeAngle} or axis == Enum.Axis.X and {-relativeAngle, 0, 0} end end ArcHandles.MouseDrag:Connect(function(axis, relativeAngle, delta) CurrentLimb.C0 = lastCFrame * CFrame.Angles(unpack(AngleFromAxis(axis, relativeAngle))) end) function switchmode(x) local maxmode=#PlayerLimbs local swmode=0 if x==1 then if curmode.Num-1<=0 then swmode=maxmode else swmode=curmode.Num-1 end else if curmode.Num+1>maxmode then swmode=1 else swmode=curmode.Num+1 end end curmode=PlayerLimbs[swmode] CurrentLimb=curmode.Limb if moder then ArcHandles.Adornee=CurrentLimb.Part1 Handles.Adornee=nil else ArcHandles.Adornee=nil Handles.Adornee=CurrentLimb.Part1 end if CurrentLimb.Name~="RootJoint" then ttb.Text=tostring(string.sub(CurrentLimb.Name,1,#CurrentLimb.Name-1)) else ttb.Text=tostring(CurrentLimb.Name) end end ttb.Text=tostring(string.sub(CurrentLimb.Name,1,#CurrentLimb.Name-1)) pcall(function() local htr=hum:GetPlayingAnimationTracks() for _,v in pairs(htr) do v:Stop() end local htr=hum:GetPlayingAnimationTracks() for _,v in pairs(htr) do v:Stop() end end) local bln=char.bln.Value function NullifyCFrame(cord,normal) local cx,cy,cz=cord.C0:ToEulerAnglesXYZ() if cord==ls then return cord.C0*CFrame.Angles(0,rd(90),0)+v3(1,-.5,0) end if cord==rs then return cord.C0*CFrame.Angles(rd(0),rd(0),rd(0))+v3(-1,-.5,0) end end function ReturnLimbData(limb,tc0) local ncfram=NullifyCFrame(limb,tc0) local cx,cy,cz=ncfram:ToEulerAnglesXYZ() if limb==ls then return tostring(math.deg(cx)),tostring(math.deg(cy)),tostring(math.deg(cz)),tostring(ncfram.X),tostring(ncfram.Y),tostring(ncfram.Z) end if limb==rs then return tostring(math.deg(-cx)),tostring(math.deg(cy)),tostring(math.deg(-cz)),tostring(ncfram.X),tostring(ncfram.Y),tostring(ncfram.Z) end end function ExportAnim() local exportstring="" local lm="ls" local lmc=ls.C0 local lsstr=(lm..".C0="..lm..".C0:Lerp(cf("..tostring(lmc).."),.1)") exportstring=exportstring..lsstr..bln local lm="rs" local lmc=rs.C0 local lsstr=(lm..".C0="..lm..".C0:Lerp(cf("..tostring(lmc).."),.1)") exportstring=exportstring..lsstr..bln local lm="lh" local lmc=lh.C0 local lsstr=(lm..".C0="..lm..".C0:Lerp(cf("..tostring(lmc).."),.1)") exportstring=exportstring..lsstr..bln local lm="rh" local lmc=rh.C0 local lsstr=(lm..".C0="..lm..".C0:Lerp(cf("..tostring(lmc).."),.1)") exportstring=exportstring..lsstr..bln local lm="rj" local lmc=rj.C0 local lsstr=(lm..".C0="..lm..".C0:Lerp(cf("..tostring(lmc).."),.1)") exportstring=exportstring..lsstr..bln local lm="ne" local lmc=ne.C0 local lsstr=(lm..".C0="..lm..".C0:Lerp(cf("..tostring(lmc).."),.1)") exportstring=exportstring..lsstr..bln -- exportstring=exportstring..lsstr..bln tb.Text=exportstring end ExportAnim() function hidehandles() if not hider then hider=true ArcHandles.Adornee=nil Handles.Adornee=nil else if moder then ArcHandles.Adornee=CurrentLimb.Part1 Handles.Adornee=nil else ArcHandles.Adornee=nil Handles.Adornee=CurrentLimb.Part1 end hider=false end end uis.InputBegan:Connect(function(k,g) if g then return end if k.KeyCode==Enum.KeyCode.G then switchmode(1) end if k.KeyCode==Enum.KeyCode.Q then anev:FireServer(ls.C0,rs.C0,lh.C0,rh.C0,rj.C0,ne.C0) end if k.KeyCode==Enum.KeyCode.R then moder = not moder if moder then ArcHandles.Adornee=CurrentLimb.Part1 Handles.Adornee=nil else ArcHandles.Adornee=nil Handles.Adornee=CurrentLimb.Part1 end end if k.KeyCode==Enum.KeyCode.E then ExportAnim() end if k.KeyCode==Enum.KeyCode.Z then if CurrentLimb==lastLimb then CurrentLimb.C0=lastCFrame end end if k.KeyCode==Enum.KeyCode.X then CurrentLimb.C0=curmode.Nc0 end if k.KeyCode==Enum.KeyCode.H then hidehandles() end end) function switchlimb(t) curmode=PlayerLimbs[t] CurrentLimb=curmode.Limb if moder then ArcHandles.Adornee=CurrentLimb.Part1 Handles.Adornee=nil else ArcHandles.Adornee=nil Handles.Adornee=CurrentLimb.Part1 end if CurrentLimb.Name~="RootJoint" then ttb.Text=tostring(string.sub(CurrentLimb.Name,1,#CurrentLimb.Name-1)) else ttb.Text=tostring(CurrentLimb.Name) end end Camera=workspace.CurrentCamera mouse.Button1Down:Connect(function() local target=(mouse.Hit.p-Camera.CFrame.p).unit*30 local r=Ray.new(Camera.CFrame.p,target) local hit,pos,norm=workspace:FindPartOnRayWithWhitelist(r,{char["Right Arm"],char["Left Arm"],char["Right Leg"],char["Left Leg"],char["Torso"],char["Head"]}) if hit then if hit==char["Right Arm"] then switchlimb(2) end if hit==char["Left Arm"] then switchlimb(1) end if hit==char["Right Leg"] then switchlimb(4) end if hit==char["Left Leg"] then switchlimb(3) end if hit==char["Torso"] then switchlimb(5) end if hit==char["Head"] then switchlimb(6) end end end) Handles.MouseDrag:Connect(function(f, dist) if CurrentLimb==ls or CurrentLimb==lh then if f == Enum.NormalId.Top then CurrentLimb.C0 = lastCFrame * CFrame.new(0, dist*increment2, 0) elseif f == Enum.NormalId.Bottom then CurrentLimb.C0 = lastCFrame * CFrame.new(0, -dist*increment2, 0) elseif f == Enum.NormalId.Left then CurrentLimb.C0 = lastCFrame * CFrame.new(0, 0, dist*increment2) elseif f == Enum.NormalId.Right then CurrentLimb.C0 = lastCFrame * CFrame.new(0, 0, -dist*increment2) elseif f == Enum.NormalId.Front then CurrentLimb.C0 = lastCFrame * CFrame.new(-dist*increment2, 0, 0) elseif f == Enum.NormalId.Back then CurrentLimb.C0 = lastCFrame * CFrame.new(dist*increment2, 0, 0) end end if CurrentLimb==rs or CurrentLimb==rh then if f == Enum.NormalId.Top then CurrentLimb.C0 = lastCFrame * CFrame.new(0, dist*increment2, 0) elseif f == Enum.NormalId.Bottom then CurrentLimb.C0 = lastCFrame * CFrame.new(0, -dist*increment2, 0) elseif f == Enum.NormalId.Left then CurrentLimb.C0 = lastCFrame * CFrame.new(0, 0, -dist*increment2) elseif f == Enum.NormalId.Right then CurrentLimb.C0 = lastCFrame * CFrame.new(0, 0, dist*increment2) elseif f == Enum.NormalId.Front then CurrentLimb.C0 = lastCFrame * CFrame.new(dist*increment2, 0, 0) elseif f == Enum.NormalId.Back then CurrentLimb.C0 = lastCFrame * CFrame.new(-dist*increment2, 0, 0) end end if CurrentLimb==rj or CurrentLimb==ne then if f == Enum.NormalId.Top then CurrentLimb.C0 = lastCFrame * CFrame.new(0, 0, dist*increment2) elseif f == Enum.NormalId.Bottom then CurrentLimb.C0 = lastCFrame * CFrame.new(0, 0, -dist*increment2) elseif f == Enum.NormalId.Left then CurrentLimb.C0 = lastCFrame * CFrame.new(dist*increment2, 0, 0) elseif f == Enum.NormalId.Right then CurrentLimb.C0 = lastCFrame * CFrame.new(-dist*increment2, 0, 0) elseif f == Enum.NormalId.Front then CurrentLimb.C0 = lastCFrame * CFrame.new(0, -dist*increment2, 0) elseif f == Enum.NormalId.Back then CurrentLimb.C0 = lastCFrame * CFrame.new(0, dist*increment2, 0) end end end) ArcHandles.MouseButton1Down:Connect(function() lastCFrame = CurrentLimb.C0 lastLimb=CurrentLimb end) Handles.MouseButton1Down:Connect(function() lastCFrame = CurrentLimb.C0 lastLimb=CurrentLimb end) --]] NLS(a,owner.Character) CurrentAnimationDict={} editingmode=true holdingmanipulation=true local vsiz=4 canwalk=false random=math.random anev.OnServerEvent:Connect(function(_,ls0,rs0,lh0,rh0,rj0,ne0) ls.C0=ls0 rs.C0=rs0 lh.C0=lh0 rh.C0=rh0 rj.C0=rj0 ne.C0=ne0 end)